﻿using System;
using System.Net.Http.Headers;

namespace Lesson9_变长参数和参数默认值
{
    class Program
    {
        #region 变长参数关键词
        //使用params作为变长参数关键字
        //举例如下
        static int Sum(params int[] arr)
        {
            //使用变长参数时要注意参数长度为0的情况
            if(arr.Length == 0)
            {
                return 0;
            }
            int sum = 0;
            for (int i = 0; i < arr.Length; i++)
            {
                sum += arr[i];
            }
            return sum;
        }
        // 1. params int[] arr 意味着可以传入n个int参数(是int，而非int[])，n可以为0，传入的参数存储在arr数组中
        // 2. params 关键字后必须为数组
        // 3. 数组可以为任意类型
        // 4. 函数参数中最多只能有一个 params 关键字，并且被 params 关键字修饰的参数必须写在最后一个，前面可以有n个参数
        #endregion

        #region 参数默认值
        //有参数默认值的参数，一般成为可选参数
        //作用是 当调用函数时可以不传参，这时会使用默认值作为参数的值
        static void Speak(string str = "你好")
        {
            Console.WriteLine(str);
        }

        // 1. 支持多参数默认值，每个参数都可以有默认值
        // 2. 如果要将普通参数和可选参数混用 可选参数必须写在普通参数后面
        #endregion
        static void Main(string[] args)
        {
            #region 变长参数关键词
            int[] nums = {1,2,3,4,5,6,7,8,9,10};
            Console.WriteLine("数组和为{0}", Sum(nums));
            #endregion

            Console.WriteLine("***************************");

            #region 参数默认值
            Speak();
            Speak("一点都不好");
            #endregion
        }
    }
}